package com.cwj.register.utils;

import java.sql.*;
import java.util.*;


/**
 * 数据库连接工具 提供 获取连接 关闭连接 通用的查询和更新方法
 *
 */
public class DBHelper {


	private static String user = "jdbc:mysql://localhost:3306/user?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
	private static String userName ="root";
	private static String userPwd = "123456";
	
	/**
	 * 获取数据库连接对象
	 * @return
	 */
	public static Connection getConn() {
		Connection conn = null;
		try {
//			Class.forName("com.mysql.cj.jdbc.Driver");   mysql 8.0以后建议用这个 
			Class.forName("com.mysql.cj.jdbc.Driver");
			conn = DriverManager.getConnection(user,userName ,userPwd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 关闭数据库连接对象
	 * @param conn
	 */
	public static void closeConn(Connection conn) {
		try {
			if(conn!=null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 通用的查询功能 返回资源数据集
	 * @param conn
	 * @param sql
	 * @param params
	 * @return
	 */
	public static ResultSet queryDate(Connection conn,String sql,List<Object> params) {
		ResultSet rs = null;
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			if(params!=null && params.size()>0) {
				for(int i=0;i<params.size();i++) {
					ps.setObject((i+1), params.get(i));
				}
			}
			rs = ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 通用的更新方法 返回布尔值表示是否更新成功！
	 * @param conn
	 * @param sql
	 * @param params
	 * @return
	 */
	public static boolean updateDate(Connection conn,String sql,List<Object> params) {
		boolean flag = false;
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			if(params!=null && params.size()>0) {
				for(int i=0;i<params.size();i++) {
					ps.setObject(i+1, params.get(i));
				}
			}
			int e = ps.executeUpdate();
			if(e>0) {
				flag=true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return flag;
	}
}
